// 导航守卫
// 导入路由
import router from '@/router'
// 导入存取token的方法
import { getToken, removeToken } from '@/utils/storage'
// 导入仓库
import { useUserInfo } from '@/stores/userInfo'

// 如果用户访问的是下面的这两个路由,则直接跳转到登录
const whiteList = ['/personage', '/shoppingCart']

//
router.beforeEach(async (to, from, next) => {
  // 从本地取出token
  const token = getToken()
  // 获取到仓库实例
  const userInfo = useUserInfo()
  // 判断当前是否有token
  // 如果有token,证明之前登录过
  if (token) {
    // 再去从store中取出对应的用户信息
    const user = !!userInfo.name
    console.log(user)
    if (user) {
      // console.log(111)

      // 放行
      next()
    } else {
      try {
        // 调用获取用户信息的方法
        await userInfo.getuserInfo()
        console.log(2222)

        next(to)
      } catch (error) {
        // 如果获取失败,有可能是token过期
        // 调用仓库中退出登录的接口
        await userInfo.reset()
        console.log(333)

        // 并从新调转到登录页面
        next('/login')
      }
    }
    // 表示没有登录过
  } else {
    // 鉴权
    if (whiteList.includes(to.path)) {
      // 表示访问的是个人中心或者购物车,需要用户登录
      next('/login')
    }
    // 如果不是,则可以直接放行
    next()
  }
})
